home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / python2.6 / multifile.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-11-11  |  5KB  |  185 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''A readline()-style interface to the parts of a multipart message.
  5.  
  6. The MultiFile class makes each part of a multipart message "feel" like
  7. an ordinary file, as long as you use fp.readline().  Allows recursive
  8. use, for nested multipart messages.  Probably best used together
  9. with module mimetools.
  10.  
  11. Suggested use:
  12.  
  13. real_fp = open(...)
  14. fp = MultiFile(real_fp)
  15.  
  16. "read some lines from fp"
  17. fp.push(separator)
  18. while 1:
  19.         "read lines from fp until it returns an empty string" (A)
  20.         if not fp.next(): break
  21. fp.pop()
  22. "read remaining lines from fp until it returns an empty string"
  23.  
  24. The latter sequence may be used recursively at (A).
  25. It is also allowed to use multiple push()...pop() sequences.
  26.  
  27. If seekable is given as 0, the class code will not do the bookkeeping
  28. it normally attempts in order to make seeks relative to the beginning of the
  29. current file part.  This may be useful when using MultiFile with a non-
  30. seekable stream object.
  31. '''
  32. from warnings import warn
  33. warn('the multifile module has been deprecated since Python 2.5', DeprecationWarning, stacklevel = 2)
  34. del warn
  35. __all__ = [
  36.     'MultiFile',
  37.     'Error']
  38.  
  39. class Error(Exception):
  40.     pass
  41.  
  42.  
  43. class MultiFile:
  44.     seekable = 0
  45.     
  46.     def __init__(self, fp, seekable = 1):
  47.         self.fp = fp
  48.         self.stack = []
  49.         self.level = 0
  50.         self.last = 0
  51.         if seekable:
  52.             self.seekable = 1
  53.             self.start = self.fp.tell()
  54.             self.posstack = []
  55.         
  56.  
  57.     
  58.     def tell(self):
  59.         if self.level > 0:
  60.             return self.lastpos
  61.         return self.fp.tell() - self.start
  62.  
  63.     
  64.     def seek(self, pos, whence = 0):
  65.         here = self.tell()
  66.         if whence:
  67.             None if whence == 1 else self.level > 0
  68.         
  69.         if (not None if pos <= pos else pos <= here or self.level > 0) and pos > self.lastpos:
  70.             raise Error, 'bad MultiFile.seek() call'
  71.         pos > self.lastpos
  72.         self.fp.seek(pos + self.start)
  73.         self.level = 0
  74.         self.last = 0
  75.  
  76.     
  77.     def readline(self):
  78.         if self.level > 0:
  79.             return ''
  80.         line = self.fp.readline()
  81.         if not line:
  82.             self.level = len(self.stack)
  83.             self.last = self.level > 0
  84.             if self.last:
  85.                 raise Error, 'sudden EOF in MultiFile.readline()'
  86.             self.last
  87.             return ''
  88.         if not self.level == 0:
  89.             raise AssertionError
  90.         if self.is_data(line):
  91.             return line
  92.         marker = line.rstrip()
  93.         for i, sep in enumerate(reversed(self.stack)):
  94.             if marker == self.section_divider(sep):
  95.                 self.last = 0
  96.                 break
  97.                 continue
  98.             self.is_data(line)
  99.             if marker == self.end_marker(sep):
  100.                 self.last = 1
  101.                 break
  102.                 continue
  103.             self.level == 0
  104.         else:
  105.             return line
  106.         if line.seekable:
  107.             self.lastpos = self.tell() - len(line)
  108.         
  109.         self.level = i + 1
  110.         if self.level > 1:
  111.             raise Error, 'Missing endmarker in MultiFile.readline()'
  112.         self.level > 1
  113.         return ''
  114.  
  115.     
  116.     def readlines(self):
  117.         list = []
  118.         while None:
  119.             line = self.readline()
  120.             if not line:
  121.                 break
  122.             
  123.             continue
  124.             return list
  125.  
  126.     
  127.     def read(self):
  128.         return ''.join(self.readlines())
  129.  
  130.     
  131.     def next(self):
  132.         while self.readline():
  133.             pass
  134.         if self.level > 1 or self.last:
  135.             return 0
  136.         self.level = 0
  137.         self.last = 0
  138.         if self.seekable:
  139.             self.start = self.fp.tell()
  140.         
  141.         return 1
  142.  
  143.     
  144.     def push(self, sep):
  145.         if self.level > 0:
  146.             raise Error, 'bad MultiFile.push() call'
  147.         self.level > 0
  148.         self.stack.append(sep)
  149.         if self.seekable:
  150.             self.posstack.append(self.start)
  151.             self.start = self.fp.tell()
  152.         
  153.  
  154.     
  155.     def pop(self):
  156.         if self.stack == []:
  157.             raise Error, 'bad MultiFile.pop() call'
  158.         self.stack == []
  159.         if self.level <= 1:
  160.             self.last = 0
  161.         else:
  162.             abslastpos = self.lastpos + self.start
  163.         self.level = max(0, self.level - 1)
  164.         self.stack.pop()
  165.         if self.seekable:
  166.             self.start = self.posstack.pop()
  167.             if self.level > 0:
  168.                 self.lastpos = abslastpos - self.start
  169.             
  170.         
  171.  
  172.     
  173.     def is_data(self, line):
  174.         return line[:2] != '--'
  175.  
  176.     
  177.     def section_divider(self, str):
  178.         return '--' + str
  179.  
  180.     
  181.     def end_marker(self, str):
  182.         return '--' + str + '--'
  183.  
  184.  
  185.